package com.improvess.statistical;

import Jama.Matrix;

public class Normal {

	public static double normal(Matrix x, Matrix medias,
			Matrix matrizCovariancia, int dimensao) {

		double retorno = 1.0 / (Math.pow(2 * Math.PI, dimensao / 2.0) * Math
				.pow(matrizCovariancia.det(), 1.0 / 2));
		try {
			Matrix x_minus_medias = x.minus(medias);
			Matrix x_minus_medias_transpose = x_minus_medias.transpose();
			Matrix matrizCovariancia_inverse = matrizCovariancia.inverse();

			Matrix x_minus_medias_transpose_times_matrizCovariancia_inverse = x_minus_medias_transpose
					.times(matrizCovariancia_inverse);

			retorno = retorno
					* Math
							.exp(x_minus_medias_transpose_times_matrizCovariancia_inverse
									.times(x_minus_medias).times(-1.0 / 2).get(
											0, 0));
		} catch (RuntimeException e) {
			throw e;
		}

		return retorno;
	}

}
